package cn.vc.media.service;

import cn.vc.basicmodule.entity.Result;
import cn.vc.media.entity.po.MediaFiles;

import java.io.File;

/**
 * @description 媒资文件管理业务类
 * @author Mr.M
 * @date 2022/9/10 8:55
 * @version 1.0
 */
public interface BigFileService {

    MediaFiles addMediaFilesToDb(String fileMd5, String bucket, String objectName, String fileType);

    /**
     * @description 检查文件是否存在
     * @param fileMd5 文件的md5
     * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
     * @author Mr.M
     * @date 2022/9/13 15:38
     */
    Result<?> checkFile(String fileMd5);

    /**
     * 检查分块是否存在
     * @param fileMd5  文件的md5
     * @param chunkIndex  分块序号
     * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
     * @author Mr.M
     * @date 2022/9/13 15:39
     */
    boolean checkChunk(String fileMd5, int chunkIndex);

    /**
     * @description 上传分块
     * @param fileMd5  文件md5
     * @param chunk  分块序号
     * @param localChunkFilePath  分块文件本地路径
     * @return com.xuecheng.base.model.RestResponse
     * @author Mr.M
     * @date 2022/9/13 15:50
     */
    Result<?> uploadChunk(String fileMd5, int chunk, String localChunkFilePath);


    /**
     * @description 合并分块
     * @param fileMd5  文件md5
     * @param chunkTotal 分块总和
     * @param filename 源文件名称
     * @return cn.vc.basicmodule.entity
     * @author Mr.M
     * @date 2022/9/13 15:56
     */
    Result<?> mergechunks(String fileMd5, int chunkTotal, String filename);

    /**
     * 从minio下载文件
     * @param bucket 桶
     * @param objectName 对象名称
     * @return 下载后的文件
     */
    File downloadFileFromMinIO(String bucket, String objectName);

    /**
     * 将文件上传到minio
     * @param localFilePath 文件本地路径
     * @param mimeType 媒体类型
     * @param bucket 桶
     * @param objectName 对象名
     * @return
     */
    boolean addMediaFilesToMinio(String localFilePath, String mimeType, String bucket, String objectName);

}
